<?php

class Application_Model_DbTable_Usuarios extends Zend_Db_Table_Abstract {

    protected $_name = 'usuarios';
    private $row_user;

    public function loginUser($nombreUsuario, $clave) {

        if (!empty($nombreUsuario) && !empty($clave)) {
            Zend_Loader::loadClass('Zend_Auth_Adapter_DbTable');
            $autAdapter = new Zend_Auth_Adapter_DbTable(self::getDefaultAdapter());
            $autAdapter->setTableName('usuarios');
            $autAdapter->setIdentityColumn('nombre_usuario');
            $autAdapter->setCredentialColumn('contrasena');
            $autAdapter->setIdentity($nombreUsuario);
            $autAdapter->setCredential($clave);

            $aut = Zend_Auth::getInstance();
            $result = $aut->authenticate($autAdapter);

            if ($result->isValid()) {
                //$this->row_user = $this->fetchRow('nombre_usuario = '. $codigo); //Si es numero
                $this->row_user = $this->fetchRow("nombre_usuario ='" . $nombreUsuario . "'"); //Si es String                 
                return 1;
            } else {
                return "Credenciales de acceso incorrectas.";
            }
        } else {
            return "Hay campos en blanco";
        }
        return $this;
    }

    public function get_user() {
        //$row = $this->fetchRow('usuario = ' . $usuario);
        return $this->row_user;
    }

    public function consulta_general() {
        $select = Zend_Db_Table::getDefaultAdapter()->select();
        $select->from(array('u' => 'usuarios'), array('u.nombre_usuario', 'u.estado'))
                ->join(array('b' => 'beneficiarios'), 'u.cod_beneficiario=b.codigo_beneficiario', array('b.codigo_ud', 'b.nombres', 'b.apellidos', 'b.email_personal'))
                ->group('b.codigo_ud');

        return Zend_Db_Table::getDefaultAdapter()->fetchAll($select);
    }

    public function getClave($codigo) {
        $db = Zend_Db_Table::getDefaultAdapter();
        $select = $db->select()
                ->from(array('usuarios'), array('clave' => 'password'))
                ->where('idusuario = ?', $codigo);

        $verificar = Zend_Db_Table::getDefaultAdapter()->fetchRow($select);
        return $verificar["clave"];
    }

    public function consultar($codigo) {
        $query = $this->fetchRow('idUsuario = ' . $codigo);
        if (!$query) {
            throw new Exception("Could not find row $id");
        }
        return $query;
    }

    public function verificar($codigo) {
        $db = Zend_Db_Table::getDefaultAdapter();
        $select = $db->select()
                ->from(array('usuarios'), array('count' => 'count(idusuario)'))
                ->where('idusuario = ?', $codigo);

        $verificar = Zend_Db_Table::getDefaultAdapter()->fetchRow($select);
        return $verificar["count"];
    }

    public function existeNick($nombreUsuario) {
        $db = Zend_Db_Table::getDefaultAdapter();
        $select = $db->select()
                ->from(array('usuarios'), array('count' => 'count(nombre_usuario)'))
                ->where('nombre_usuario = ?', $nombreUsuario);
        $verificar = Zend_Db_Table::getDefaultAdapter()->fetchRow($select);
        if ($verificar["count"] > 0) {
            return true;
        } else {
            return false;
        }
    }

    public function actualizar($codigo, $rol, $facultad, $nombre, $apellido
    , $email, $direccion, $telefono, $celular) {
        $data = array('idRol' => $rol, 'codigoFacultad' => $facultad
            , 'nombres' => $nombre, 'apellidos' => $apellido
            , 'email' => $email, 'direccion' => $direccion, 'telefono' => $telefono
            , 'celular' => $celular);
        $this->update($data, 'idUsuario = ' . $codigo);
    }

    public function actualizarCuenta($codigo, $facultad, $nombre, $apellido
    , $email, $direccion, $telefono, $celular) {
        $data = array('codigoFacultad' => $facultad
            , 'nombres' => $nombre, 'apellidos' => $apellido
            , 'email' => $email, 'direccion' => $direccion, 'telefono' => $telefono
            , 'celular' => $celular);
        $this->update($data, 'idUsuario = ' . $codigo);
    }

    public function actualizarestado($nombreUsuario, $estado) {
        $data = array('estado' => $estado);
        $this->update($data, "nombre_usuario ='" . $nombreUsuario . "'");
    }

    public function actualizarClave($codigo, $clave) {
        $data = array('password' => $clave);
        $this->update($data, 'idUsuario = ' . $codigo);
    }

    public function agregar($codigo, $rol, $facultad, $nombre, $apellido
    , $email, $direccion, $telefono, $celular, $clave, $fecha) {

        $data = array('idUsuario' => $codigo, 'idRol' => $rol, 'idEstado' => 1
            , 'codigoFacultad' => $facultad, 'nombres' => $nombre, 'apellidos' => $apellido
            , 'email' => $email, 'direccion' => $direccion, 'telefono' => $telefono
            , 'celular' => $celular, 'password' => $clave, 'fechaRegistro' => $fecha
            , 'cuentaActiva' => 0);
        $this->insert($data);
    }

    public function consultarmonitor($codigo, $facultad) {
        $db = Zend_Db_Table::getDefaultAdapter();
        $select = $db->select()
                ->from('usuarios')
                ->where('idusuario = ?', $codigo)
                ->where('codigoFacultad = ?', $facultad)
                ->where('idrol = ?', '3');
        $query = Zend_Db_Table::getDefaultAdapter()->fetchRow($select);
        return $query;
    }

    public function consultarmonitores($facultad) {
        $db = Zend_Db_Table::getDefaultAdapter();
        $select = $db->select()
                ->from('usuarios')
                ->where('codigoFacultad = ?', $facultad)
                ->where('idrol = ?', '3');
        $query = Zend_Db_Table::getDefaultAdapter()->fetchAll($select);
        return $query;
    }

    public function activarcuenta($codigo) {
        $data = array('cuentaActiva' => 1);
        $this->update($data, 'idUsuario = ' . $codigo);
    }

    public function desactivarcuenta($codigo) {
        $data = array('cuentaActiva' => 0);
        $this->update($data, 'idUsuario = ' . $codigo);
    }

    public function actualizarpassword($codigo, $password) {
        $data = array('password' => $password);
        $this->update($data, 'idUsuario = ' . $codigo);
    }

}
